package org.colswe.junitlab.logica;

import java.util.Date;
import java.util.Map;

import org.colswe.junitlab.logica.exception.DatosInvalidosException;
import org.colswe.junitlab.modelo.TipoDia;
/**

* Clase interfaz de control de festivos, define todos los metodos a implementar

*/
public interface IControlFestivo {
	
	 /**
     * Cuenta las horas de dos intervalos
     * @param desdeI fecha incial primer intervalo
	 * @param hastaI fecha final primer intervalo
	 * @param desdeII fecha incial segundo intervalo
	 * @param hastaII fecha final segundo intervalo
	 */
	Integer contarHoras(Date desdeI, Date hastaI,Date desdeII, Date hastaII ) throws DatosInvalidosException;
	/**
	 * Cuenta las horas laborables en un rango de fechas dado
	 * @param desde fecha incial
	 * @param hasta fecha final
	 * */
	Integer contarHoras(Date desde, Date hasta) throws DatosInvalidosException;
	
	/**
	 * Valida si dos fechas son correctas, es decir que no sean nulas y que desde sea menor que hasta
	 * @param desde fecha incial
	 * @param hasta fecha final
	 */

	boolean fechasValidas(Date desde, Date hasta);

	/**
	 * Retorna un mapa de los tipos de día y la cantidad que hay segun la lista de festivos del sistemas
	 * @param desde fecha incial
	 * @param hasta fecha final
	 * */
	Map<TipoDia, Integer> obtenerDias(Date desde, Date hasta);

	/**
	 * Cuenta las horas  segun la cantidad de días de cada tipo
	 * @param info mapa de tipo de dias y su cantidad
	 * @throws DatosInvalidosException
	 * */
	Integer contarHoras(Map<TipoDia, Integer> info) throws DatosInvalidosException;
	
	/**
	 * Cuenta las horas que restan de trabajo en un dia
	 * @param Date desde
	 * @throws DatosInvalidosException
	 * */
	Integer contarHorasPorTrabajar(Date desde) throws DatosInvalidosException;
}
